package com.springapp.service.impl;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.springapp.model.Desk;
import com.springapp.model.ItemInOrder;
import com.springapp.model.Order;
import com.springapp.model.Order;
import com.springapp.model.OrderStatus;
import com.springapp.model.Status;
import com.springapp.repository.OrderRepository;
import com.springapp.service.OrderService;

import org.springframework.transaction.annotation.Transactional;

@Service
public class OrderServiceImpl implements OrderService{

    @Autowired
    OrderRepository orderRepository;

    public Order getById(Integer id) {
        return orderRepository.findOne(id);
    }

    public List<Order> getAll() {
        return (ArrayList<Order>) orderRepository.findAll();
    }

    public void create(Order order) {
        orderRepository.save(order);
    }

    public Order update(Order order){
        return orderRepository.save(order);
    }

    public void delete(Integer id) {
        orderRepository.delete(id);
    }
    
    //НИХУЯ НЕ ПОНЯТНО В КАКОЙ КЛАСС ПИХАТЬ ЭТОТ МЕТОД???
    //КЛАСС НАПИСАН НЕ ПРАВИЛЬНО! У ТЕБЯ itemsInOrder СОДЕРЖИТ ВСЕГО ПО 2 ПАРЫ!!!
    public void createNewOrder(Order order, Desk desk) {
        order.setDesk(desk);
        desk.setStatus(Status.ORDERED); // internal
        Order newOrder = orderService.update(order);
        List<ItemInOrder> itemsInOrder = order.getItemsInOrder();
        for (int i = 0; i < itemsInOrder.size(); i++) {
            ItemInOrder itemInOrder = new ItemInOrder();
            itemInOrder.setQuantity(itemsInOrder.get(i).getQuantity());
            itemInOrder.setItem(itemService.getById(itemsInOrder.get(i).getId()));
            itemInOrder.setOrder(newOrder);
            itemInOrderService.create(itemInOrder);
            itemsInOrder.add(itemInOrder);
        }
        order.setItemsInOrder(itemsInOrder);
        desk.setOrder(order);
        tableService.update(desk);
        orderService.create(order);
    }
    
    //И ЭТОТ ТОЖЕ НЕ ПОНЯТНО КУДА ВСУНУТЬ -_-
    public void updateOrder(Order oldOrder, Order newOrder){
    	Desk desk = tsi.getById(oldOrder.getDesk().getId());
    	if (newOrder.getStatus() == OrderStatus.CLOSED) {
            desk.setStatus(Status.FREE);
            desk.setOrder(null);
        }
    	tsi.update(desk);
    	
    	iiosi.deleteByOrder(oldOrder.getId());
    	
    	List<ItemInOrder> itemsInOrder = newOrder.getItemsInOrder();
    	List<ItemInOrder> newList = new ArrayList<ItemInOrder>();
        for (int i = 0; i < itemsInOrder.size(); i++) {
            ItemInOrder itemInOrder = new ItemInOrder();
            itemInOrder.setQuantity(itemsInOrder.get(i).getQuantity());
            itemInOrder.setItem(itemService.getById(itemsInOrder.get(i).getId()));
            itemInOrder.setOrder(oldOrder);
            itemInOrderService.create(itemInOrder);
            newList.add(itemInOrder);
        }
        order.setItemsInOrder(newList);
        orderServise.update(oldOrder);
     /*   tableService.update(desk);
        orderService.create(order);*/
    }
}
